.TH stralloc 3
.SH NAME
stralloc \- dynamically allocated strings
.SH SYNTAX
.B #include <stralloc.h>

int \fBstralloc_ready\fP(&\fIsa\fR,\fIlen\fR);
.br
int \fBstralloc_readyplus\fP(&\fIsa\fR,\fIlen\fR);

int \fBstralloc_copy\fP(&\fIsa\fR,&\fIsa2\fR);
.br
int \fBstralloc_copys\fP(&\fIsa\fR,\fIbuf\fR);
.br
int \fBstralloc_copyb\fP(&\fIsa\fR,\fIbuf\fR,\fIlen\fR);

int \fBstralloc_cat\fP(&\fIsa\fR,&\fIsa2\fR);
.br
int \fBstralloc_cats\fP(&\fIsa\fR,\fIbuf\fR);
.br
int \fBstralloc_catb\fP(&\fIsa\fR,\fIbuf\fR,\fIlen\fR);

int \fBstralloc_append\fP(&\fIsa\fR,\fIbuf\fR);
.br
int \fBstralloc_0\fP(&\fIsa\fR);

int \fBstralloc_starts\fP(&\fIsa\fR,\fIbuf\fR);

stralloc \fIsa\fR = {0};
.br
stralloc \fIsa2\fR = {0};
.br
unsigned int \fIlen\fR;
.br
char *\fIbuf\fR;
.SH DESCRIPTION
A
.B stralloc
variable holds a string in dynamically allocated space.
String length is limited only by memory.
String contents are unrestricted.

The
.B stralloc
structure has three components:
.I sa\fB.s
is a pointer to the string, or 0 if it is not allocated;
.I sa\fB.len
is the number of bytes in the string, if it is allocated;
.I sa\fB.a
is the number of bytes allocated for the string, if it is allocated.
A
.B stralloc
variable should be initialized to {0},
meaning unallocated.

.B stralloc_ready
makes sure that
.I sa
has enough space allocated for
.I len
characters.
It allocates extra space if necessary.

.B stralloc_readyplus
makes sure that
.I sa
has enough space allocated for
.I len
characters more than its current length.
If
.I sa
is unallocated,
.B stralloc_readyplus
is the same as
.BR stralloc_ready .

.B stralloc_copy
copies
.I sa2
to
.IR sa ,
allocating space if necessary.
Here
.I sa2
is an allocated
.B stralloc
variable.

.B stralloc_copys
copies a 0-terminated string,
.IR buf ,
to
.IR sa ,
without the 0.

.B stralloc_copyb
copies
.I len
characters from
.I buf
to
.IR sa .

.B stralloc_cat
appends
.I sa2
to
.IR sa ,
allocating space if necessary.
If
.I sa
is unallocated,
.B stralloc_cat
is the same as
.BR stralloc_copy .

.B stralloc_cats
and
.B stralloc_catb
are analogous to
.B stralloc_copys
and
.BR stralloc_copyb .

.B stralloc_append
adds a single character,
.IR *buf ,
to
.IR sa ,
allocating space if necessary.

.B stralloc_0
adds a single 0 character
to
.IR sa .

.B stralloc_starts
returns 1 if the 0-terminated string
.IR buf ,
without the 0,
is a prefix of
.IR sa .
.SH "ERROR HANDLING"
If a
.B stralloc
routine runs out of memory,
it leaves
.I sa
alone and returns 0,
setting
.B errno
appropriately.
On success it returns 1;
this guarantees that
.I sa
is allocated.
.SH "SEE ALSO"
alloc(3),
error(3)
